package com.ytxg.practice.controller;

import com.ytxg.practice.dto.ParkDto;
import com.ytxg.practice.po.Admin;
import com.ytxg.practice.po.Diqu;
import com.ytxg.practice.po.Park;
import com.ytxg.practice.service.AdminService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/admin")
public class AdminController {

    @Resource
    private AdminService adminService;


    @GetMapping("login")
    public String login(){
        return "admin/login.html";
    }

    /**
     * 登录模块
     * @param httpSession
     * @param name
     * @param password
     * @param model
     * @return
     */
    @PostMapping("login")
    public String login(HttpSession httpSession, String name, String password, Model model){
        //调用service层，根据用户名和密码查询是否有这个账号，如果有就把信息传给前端，如果没有就登陆失败
        Admin login = adminService.login(name, password);
        //判断是否登陆成功
        if(login.equals("登录失败")){
            //失败则向前端传输"用户名或密码错误"信息
            model.addAttribute("msg","用户名或密码错误");
            return "admin/login";
        }
        //用于给前端传输数据
        httpSession.setAttribute("LogAdmin",login);
        //传完数据就展示index页面
        return "admin/index";
    }

    /**
     * 车位列表展示模块
     * @param model
     * @return
     */
    @RequestMapping("car-list")
    public String carList(Model model){
        //获取车位列表
        List<ParkDto> carList = adminService.getCarList();
        //向浏览器传递数据
        model.addAttribute("carList",carList);
        model.addAttribute("carNum",carList.size());
        //传完数据展示car-list页面
        return "car/car-list";
    }

    /**
     * 车位添加展示页面模块
     * @param httpSession
     * @return
     */
    @RequestMapping("car-add")
    public String carAdd(HttpSession httpSession){
        //获取页面所需的地区列表
        List<Diqu> diQuList = adminService.getDiQuList();
        //向浏览器传输地区列表数据
        httpSession.setAttribute("diquList",diQuList);
        //传输完则展示car-add页面
        return "car/car-add";
    }

    /**
     * 车位添加模块
     * @param car
     * @return
     */
    @RequestMapping("car-save")
    @ResponseBody
    public Map<String,String> carSave(@ModelAttribute("car") Park car){
        //调用service层的添加车位接口，并返回数据给前端
        return adminService.addCar(car);
    }

    /**
     * 车位删除模块
     * @param carId
     * @return
     */
    @PostMapping("delCar")
    @ResponseBody
    public Map<String,String> delCar(@RequestParam("carId") Integer carId){
        //参数中carId是前端传递过来的数据
        //调用service层的删除车位接口
        Map<String, String> map = adminService.delCar(carId);

        return map;
    }

    /**
     * 车位修改展示页面模块
     * @param carId
     * @param model
     * @param httpSession
     * @return
     */
    @RequestMapping("car-edit")
    public String carEdit(@RequestParam("carId") Integer carId,Model model,HttpSession httpSession){
        //获取车位信息
        Park park = adminService.editCar(carId);
        //传给前端
        model.addAttribute("car",park);
        //地区信息传给前端
        httpSession.setAttribute("diquList",adminService.getDiQuList());
        return "car/car-edit";
    }
    /**
     * 车位修改模块
     * @param car
     * @return
     */
    @RequestMapping("car-update")
    @ResponseBody
    public Map<String,String> carUpdate(@ModelAttribute("car") Park car){
        //调用service
        Map<String, String> map = adminService.carUpdate(car);
        return map;
    }

    /**
     * 车位查询模块
     * @param key
     * @param model
     * @return
     */
    @RequestMapping("findCarByKey")
    public String findCarByKey(@RequestParam("keyTmp") String key,  Model model){
        //调用service层根据key值模糊查询获取车位列表
        List<ParkDto> carList = adminService.findCarByKey(key);
        //向浏览器传输列表数据
        model.addAttribute("carList",carList);
        model.addAttribute("carNum",carList.size());
        return "car/car-list";
    }

}
